package com.jinyang.login

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.jinyang.baserouter.PATH_ACTIVITY_HELLO_SERVICE
import com.jinyang.baserouter.PATH_SERVICE_HELLO
import com.jinyang.baserouter.service.HelloService
import com.jinyang.login.databinding.ActivityHelloServiceBinding

/**
 * 通过依赖注入解耦:服务管理(二) 发现服务
 */
@Route(path = PATH_ACTIVITY_HELLO_SERVICE)
class HelloServiceActivity : AppCompatActivity() {
    @Autowired
    lateinit var helloService1: HelloService

    @Autowired(name = PATH_SERVICE_HELLO)
    lateinit var helloService2: HelloService

    var helloService3: HelloService? = null

    var helloService4: HelloService? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ARouter.getInstance().inject(this)
        // 1. (推荐)使用依赖注入的方式发现服务,通过注解标注字段,即可使用，无需主动获取
        // Autowired注解中标注name之后，将会使用byName的方式注入对应的字段，
        // 不设置name属性，会默认使用byType的方式发现服务(当同一接口有多个实现的时候，必须使用byName的方式发现服务)
        val binding =
            DataBindingUtil.setContentView<ActivityHelloServiceBinding>(
                this,
                R.layout.activity_hello_service
            )
        binding.btnAutowired.setOnClickListener {
            helloService1.sayHello("msg1")
        }
        binding.btnAutowiredName.setOnClickListener {
            helloService2.sayHello("msg2")
        }
        // 2.使用依赖查找的方式发现服务，主动去发现服务并使用，下面两种方式分别是byName和byType
        binding.btnNavByType.setOnClickListener {
            helloService3 = ARouter.getInstance().navigation(HelloService::class.java)
            helloService3?.sayHello("msg3")
        }
        binding.btnNavByName.setOnClickListener {
            helloService4 =
                ARouter.getInstance().build(PATH_SERVICE_HELLO).navigation() as HelloService?
            helloService4?.sayHello("msg4")
        }
    }
}